package com.example.demo.mapper.system;

import com.example.demo.entity.system.SysUserFieldValue;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 用户字段值数据访问层
 */
@Mapper
public interface SysUserFieldValueMapper {
    
    /**
     * 根据用户ID查询字段值列表
     *
     * @param userId 用户ID
     * @return 字段值集合
     */
    List<SysUserFieldValue> selectValuesByUserId(Long userId);
    
    /**
     * 根据用户ID和系统编码查询字段值列表
     *
     * @param userId 用户ID
     * @param systemCode 系统编码
     * @return 字段值集合
     */
    List<SysUserFieldValue> selectValuesByUserIdAndSystemCode(@Param("userId") Long userId, @Param("systemCode") String systemCode);
    
    /**
     * 根据用户ID和字段ID查询字段值
     *
     * @param userId 用户ID
     * @param fieldId 字段ID
     * @return 字段值对象
     */
    SysUserFieldValue selectValueByUserIdAndFieldId(@Param("userId") Long userId, @Param("fieldId") Long fieldId);
    
    /**
     * 新增字段值
     *
     * @param fieldValue 字段值信息
     * @return 影响行数
     */
    int insertFieldValue(SysUserFieldValue fieldValue);
    
    /**
     * 批量新增字段值
     *
     * @param fieldValues 字段值列表
     * @return 影响行数
     */
    int batchInsertFieldValues(List<SysUserFieldValue> fieldValues);
    
    /**
     * 修改字段值
     *
     * @param fieldValue 字段值信息
     * @return 影响行数
     */
    int updateFieldValue(SysUserFieldValue fieldValue);
    
    /**
     * 删除字段值
     *
     * @param id 字段值ID
     * @return 影响行数
     */
    int deleteFieldValueById(Long id);
    
    /**
     * 根据用户ID删除字段值
     *
     * @param userId 用户ID
     * @return 影响行数
     */
    int deleteFieldValueByUserId(Long userId);
    
    /**
     * 根据用户ID和系统编码删除字段值
     *
     * @param userId 用户ID
     * @param systemCode 系统编码
     * @return 影响行数
     */
    int deleteFieldValueByUserIdAndSystemCode(@Param("userId") Long userId, @Param("systemCode") String systemCode);
    
    /**
     * 根据字段ID删除字段值
     *
     * @param fieldId 字段ID
     * @return 影响行数
     */
    int deleteFieldValueByFieldId(Long fieldId);
    
    /**
     * 根据用户ID和字段值查询用户ID列表
     *
     * @param fieldId 字段ID
     * @param fieldValue 字段值
     * @return 用户ID列表
     */
    List<Long> selectUserIdsByFieldValue(@Param("fieldId") Long fieldId, @Param("fieldValue") String fieldValue);
} 